welo git mirrors
RNS/Utilities/rnstatus.py 0.5.8 (a77ec432) Text, 10.33 KB
T8b949e#!/usr/bin/env python3
T8b949e# MIT License
T8b949e#
T8b949e# Copyright (c) 2016-2022 Mark Qvist / unsigned.io
T8b949e#
T8b949e# Permission is hereby granted, free of charge, to any person obtaining a copy
T8b949e# of this software and associated documentation files (the "Software"), to deal
T8b949e# in the Software without restriction, including without limitation the rights
T8b949e# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
T8b949e# copies of the Software, and to permit persons to whom the Software is
T8b949e# furnished to do so, subject to the following conditions:
T8b949e#
T8b949e# The above copyright notice and this permission notice shall be included in all
T8b949e# copies or substantial portions of the Software.
T8b949e#
T8b949e# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
T8b949e# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
T8b949e# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
T8b949e# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
T8b949e# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
T8b949e# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
T8b949e# SOFTWARE.
Tff7b72import T7ee787RNS
Tff7b72import T7ee787argparse
Tff7b72from T7ee787RNST7ee787.T7ee787_version Tff7b72import Te6edf3__version__
Tff7b72def Td2a8ffsize_strTb4b4b4(Te6edf3numTb4b4b4, Te6edf3suffixTff7b72=Ta5d6ff'Ta5d6ffBTa5d6ff'Tb4b4b4)Tb4b4b4:
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'
Tff7b72if Te6edf3suffix Tff7b72== Ta5d6ff'Ta5d6ffbTa5d6ff'Tb4b4b4:
Te6edf3num Tff7b72*Tff7b72= T79c0ff8
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'
Tff7b72for Te6edf3unit Tff7b72in Te6edf3unitsTb4b4b4:
Tff7b72if Tffa657absTb4b4b4(Te6edf3numTb4b4b4) Tff7b72< T79c0ff1000.0Tb4b4b4:
Tff7b72if Te6edf3unit Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%.0fTa5d6ff Tffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%.2fTa5d6ff Tffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Te6edf3num Tff7b72/Tff7b72= T79c0ff1000.0
Tff7b72return Ta5d6ff"Tffd700%.2fTffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3last_unitTb4b4b4, Te6edf3suffixTb4b4b4)
Tff7b72def Td2a8ffprogram_setupTb4b4b4(Te6edf3configdirTb4b4b4, Te6edf3dispallTff7b72=Tff7b72FalseTb4b4b4, Te6edf3verbosityTff7b72=T79c0ff0Tb4b4b4, Te6edf3name_filterTff7b72=Tff7b72NoneTb4b4b4,Te6edf3jsonTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3reticulum Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTb4b4b4(Te6edf3configdir Tff7b72= Te6edf3configdirTb4b4b4, Te6edf3loglevel Tff7b72= T79c0ff3Tff7b72+Te6edf3verbosityTb4b4b4)
Te6edf3stats Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3stats Tff7b72= Te6edf3reticulumTff7b72.Td2a8ffget_interface_statsTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72if Te6edf3stats Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3jsonTb4b4b4:
Tff7b72import T7ee787json
Tff7b72for Te6edf3s Tff7b72in Te6edf3statsTb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3statsTb4b4b4[Te6edf3sTb4b4b4]Tb4b4b4, Tffa657bytesTb4b4b4)Tb4b4b4:
Te6edf3statsTb4b4b4[Te6edf3sTb4b4b4] Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3statsTb4b4b4[Te6edf3sTb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72for Te6edf3i Tff7b72in Te6edf3statsTb4b4b4[Te6edf3sTb4b4b4]Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3iTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3k Tff7b72in Te6edf3iTb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3iTb4b4b4[Te6edf3kTb4b4b4]Tb4b4b4, Tffa657bytesTb4b4b4)Tb4b4b4:
Te6edf3iTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3iTb4b4b4[Te6edf3kTb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Tffa657printTb4b4b4(Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Te6edf3statsTb4b4b4)Tb4b4b4)
Te6edf3exitTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3ifstat Tff7b72in Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6ffinterfacesTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3name Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3dispall Tff7b72or Tff7b72not Tb4b4b4(
Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffLocalInterface[Ta5d6ff"Tb4b4b4) Tff7b72or
Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffTCPInterface[ClientTa5d6ff"Tb4b4b4) Tff7b72or
Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffI2PInterfacePeer[Connected peerTa5d6ff"Tb4b4b4) Tff7b72or
Tb4b4b4(Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffI2PInterface[Ta5d6ff"Tb4b4b4) Tff7b72and Tb4b4b4(Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72FalseTb4b4b4)Tb4b4b4)
Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tb4b4b4(Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffI2PInterface[Ta5d6ff"Tb4b4b4) Tff7b72and Tb4b4b4(Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72FalseTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3name_filter Tff7b72== Tff7b72None Tff7b72or Te6edf3name_filterTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72in Te6edf3nameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3ss Tff7b72= Ta5d6ff"Ta5d6ffUpTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3ss Tff7b72= Ta5d6ff"Ta5d6ffDownTa5d6ff"
Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINTTb4b4b4:
Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffAccess PointTa5d6ff"
Tff7b72elif Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_POINT_TO_POINTTb4b4b4:
Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffPoint-to-PointTa5d6ff"
Tff7b72elif Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMINGTb4b4b4:
Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffRoamingTa5d6ff"
Tff7b72elif Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARYTb4b4b4:
Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffBoundaryTa5d6ff"
Tff7b72elif Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAYTb4b4b4:
Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffGatewayTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3modestr Tff7b72= Ta5d6ff"Ta5d6ffFullTa5d6ff"
Tff7b72if Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffclientsTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3clients Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffclientsTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffShared Instance[Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3cnum Tff7b72= Tffa657maxTb4b4b4(Te6edf3clientsTff7b72-T79c0ff1Tb4b4b4,T79c0ff0Tb4b4b4)
Tff7b72if Te6edf3cnum Tff7b72== T79c0ff1Tb4b4b4:
Te6edf3spec_str Tff7b72= Ta5d6ff"Ta5d6ff programTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3spec_str Tff7b72= Ta5d6ff"Ta5d6ff programsTa5d6ff"
Te6edf3clients_string Tff7b72= Ta5d6ff"Ta5d6ffServing : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cnumTb4b4b4)Tff7b72+Te6edf3spec_str
Tff7b72elif Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffI2PInterface[Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffi2p_connectableTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3cnum Tff7b72= Te6edf3clients
Tff7b72if Te6edf3cnum Tff7b72== T79c0ff1Tb4b4b4:
Te6edf3spec_str Tff7b72= Ta5d6ff"Ta5d6ff connected I2P endpointTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3spec_str Tff7b72= Ta5d6ff"Ta5d6ff connected I2P endpointsTa5d6ff"
Te6edf3clients_string Tff7b72= Ta5d6ff"Ta5d6ffPeers : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cnumTb4b4b4)Tff7b72+Te6edf3spec_str
Tff7b72elseTb4b4b4:
Te6edf3clients_string Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3clients_string Tff7b72= Ta5d6ff"Ta5d6ffClients : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3clientsTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3clients Tff7b72= Tff7b72None
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Tffd700{n}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nTff7b72=Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffifac_netnameTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffifac_netnameTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Network : Tffd700{nn}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nnTff7b72=Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffifac_netnameTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Status : Tffd700{ss}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3ssTff7b72=Te6edf3ssTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3clients Tff7b72!= Tff7b72None Tff7b72and Te6edf3clients_string Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3clients_stringTb4b4b4)
Tff7b72if Tff7b72not Tb4b4b4(Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffShared Instance[Ta5d6ff"Tb4b4b4) Tff7b72or Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffTCPInterface[ClientTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffLocalInterface[Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Mode : Tffd700{mode}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3modeTff7b72=Te6edf3modestrTb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffbitrateTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffbitrateTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Rate : Tffd700{ss}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3ssTff7b72=Te6edf3speed_strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffbitrateTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffairtime_shortTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Ta5d6ff"Ta5d6ffairtime_longTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Airtime : Tffd700{atl}Ta5d6ff%Ta5d6ff (1h), Tffd700{ats}Ta5d6ff%Ta5d6ff (15s)Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3atsTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffairtime_shortTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,Te6edf3atlTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffairtime_longTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffchannel_load_shortTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Ta5d6ff"Ta5d6ffchannel_load_longTa5d6ff" Tff7b72in Te6edf3ifstatTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Ch.Load : Tffd700{atl}Ta5d6ff%Ta5d6ff (1h), Tffd700{ats}Ta5d6ff%Ta5d6ff (15s)Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3atsTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffchannel_load_shortTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,Te6edf3atlTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffchannel_load_longTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffpeersTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffpeersTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Peers : Tffd700{np}Ta5d6ff reachableTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3npTff7b72=Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffpeersTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6fftunnelstateTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6fftunnelstateTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff I2P : Tffd700{ts}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3tsTff7b72=Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6fftunnelstateTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffifac_signatureTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffifac_signatureTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3sigstr Tff7b72= Ta5d6ff"Ta5d6ff<…Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffifac_signatureTa5d6ff"Tb4b4b4]Tb4b4b4[Tff7b72-T79c0ff5Tb4b4b4:Tb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff>Ta5d6ff"
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Access : Tffd700{nb}Ta5d6ff-bit IFAC by Tffd700{sig}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nbTff7b72=Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffifac_sizeTa5d6ff"Tb4b4b4]Tff7b72*T79c0ff8Tb4b4b4, Te6edf3sigTff7b72=Te6edf3sigstrTb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffi2p_b32Ta5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffi2p_b32Ta5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff I2P B32 : Tffd700{ep}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3epTff7b72=Tffa657strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffi2p_b32Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffannounce_queueTa5d6ff" Tff7b72in Te6edf3ifstat Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffannounce_queueTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffannounce_queueTa5d6ff"Tb4b4b4] Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3aqn Tff7b72= Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffannounce_queueTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3aqn Tff7b72== T79c0ff1Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Queued : Tffd700{np}Ta5d6ff announceTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3npTff7b72=Te6edf3aqnTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Queued : Tffd700{np}Ta5d6ff announcesTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3npTff7b72=Te6edf3aqnTb4b4b4)Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff Traffic : Tffd700{txb}Ta5d6ff↑Tffea00\nTa5d6ff Tffd700{rxb}Ta5d6ff↓Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3rxbTff7b72=Te6edf3size_strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6ffrxbTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3txbTff7b72=Te6edf3size_strTb4b4b4(Te6edf3ifstatTb4b4b4[Ta5d6ff"Ta5d6fftxbTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6fftransport_idTa5d6ff" Tff7b72in Te6edf3stats Tff7b72and Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftransport_idTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff Reticulum Transport Instance Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftransport_idTa5d6ff"Tb4b4b4]Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff is runningTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffCould not get RNS statusTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffmainTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3parser Tff7b72= Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4(Te6edf3descriptionTff7b72=Ta5d6ff"Ta5d6ffReticulum Network Stack StatusTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--configTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffpath to alternative Reticulum config directoryTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--versionTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4, Te6edf3versionTff7b72=Ta5d6ff"Ta5d6ffrnstatus Tffd700{version}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3versionTff7b72=Te6edf3__version__Tb4b4b4)Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff-aTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff--allTa5d6ff"Tb4b4b4,
Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffshow all interfacesTa5d6ff"Tb4b4b4,
Te6edf3defaultTff7b72=Tff7b72False
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff-jTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff--jsonTa5d6ff"Tb4b4b4,
Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffoutput in JSON formatTa5d6ff"Tb4b4b4,
Te6edf3defaultTff7b72=Tff7b72False
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff'Ta5d6ff-vTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--verboseTa5d6ff'Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff'Ta5d6ffcountTa5d6ff'Tb4b4b4, Te6edf3defaultTff7b72=T79c0ff0Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6fffilterTa5d6ff"Tb4b4b4, Te6edf3nargsTff7b72=Ta5d6ff"Ta5d6ff?Ta5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffonly display interfaces with names including filterTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3args Tff7b72= Te6edf3parserTff7b72.Td2a8ffparse_argsTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3argsTff7b72.Td2a8ffconfigTb4b4b4:
Te6edf3configarg Tff7b72= Te6edf3argsTff7b72.Td2a8ffconfig
Tff7b72elseTb4b4b4:
Te6edf3configarg Tff7b72= Tff7b72None
Te6edf3program_setupTb4b4b4(Te6edf3configdir Tff7b72= Te6edf3configargTb4b4b4, Te6edf3dispall Tff7b72= Te6edf3argsTff7b72.Td2a8ffallTb4b4b4, Te6edf3verbosityTff7b72=Te6edf3argsTff7b72.Td2a8ffverboseTb4b4b4, Te6edf3name_filterTff7b72=Te6edf3argsTff7b72.Td2a8fffilterTb4b4b4, Te6edf3jsonTff7b72=Te6edf3argsTff7b72.Td2a8ffjsonTb4b4b4)
Tff7b72except Tf85149KeyboardInterruptTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3exitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffspeed_strTb4b4b4(Te6edf3numTb4b4b4, Te6edf3suffixTff7b72=Ta5d6ff'Ta5d6ffbpsTa5d6ff'Tb4b4b4)Tb4b4b4:
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffkTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'
Tff7b72if Te6edf3suffix Tff7b72== Ta5d6ff'Ta5d6ffBpsTa5d6ff'Tb4b4b4:
Te6edf3num Tff7b72/Tff7b72= T79c0ff8
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'
Tff7b72for Te6edf3unit Tff7b72in Te6edf3unitsTb4b4b4:
Tff7b72if Tffa657absTb4b4b4(Te6edf3numTb4b4b4) Tff7b72< T79c0ff1000.0Tb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%3.2fTa5d6ff Tffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Te6edf3num Tff7b72/Tff7b72= T79c0ff1000.0
Tff7b72return Ta5d6ff"Tffd700%.2fTa5d6ff Tffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3last_unitTb4b4b4, Te6edf3suffixTb4b4b4)
Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3mainTb4b4b4(Tb4b4b4)
Served by rngit 1.5.1 - Generated in 0.09s